其實貪心只是一種思路,時常體現在各種算法裡面,像之前講的最小生成樹(prim),最短路徑(Dijkstra)就是展現了貪心的思路。
這種題目也沒有固定的做法,只是遵循這種思路再去設計貪心的策略,就整理幾題~~
122. 买卖股票的最佳时机 II
這題乍看下是DP,但其實貪心思路是可以求出答案的~~
原因是最佳解就只是每一段上升價差的和((掌握到最好的價差時間,也只能獲得每一段價差和)),所以是一個貪心思路,直接算整個數組上升和
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        int res = 0;
        for(int i = 1; i<n; ++i){
            if(prices[i]>prices[i-1]){
                res+=prices[i]-prices[i-1];
            }
        }
        return res;
    }
};
1833. 雪糕的最大数量
沒別的..就先從便宜的開始買..
class Solution {
public:
    int maxIceCream(vector<int>& costs, int coins) {
        sort(costs.begin(), costs.end());
        int res = 0;
        for(int i = 0; i<costs.size(); ++i){
            if(coins>=costs[i]){
                coins-=costs[i];
                res++;
            }
        }
        return res;
    }
};
11. 盛最多水的容器
貪心思路:從兩側開始移動,比較左右邊界,如果其中一側比較矮,先移動那一側(才有可能使容量變大)
class Solution {
public:
    int maxArea(vector<int>& height) {
        int res = 0;
        int l = height.size()-1;
        int r = 0;
        while(r<l){
            res = max(res, (l-r)*min(height[l], height[r]));
            if(height[r]<height[l]){
                r++;
            }
            else{
                l--;
            }
        }
        return res;
    }
};
機器學習中,Decision Trees,也是用到這種思路去選擇樹的建構~~